#pragma once

#include "public.h"
#include <vector>

namespace tinyjson
{
    class Array
    {
        friend std::ostream &operator<<(std::ostream &out, const Array &array);

    private:
        std::vector<TinyJsonValuePtr> m_val;

    public:
        Array();
        Array(const std::vector<TinyJsonValuePtr> &val);
        size_t size() const;
        Boolean empty() const;
        void push_back(const TinyJsonValuePtr &val);
        void push_back(const TinyJsonValue &value);
        TinyJsonValuePtr &operator[](size_t index);
        const TinyJsonValuePtr &operator[](size_t index) const;

    public:
        static ArrayPtr create_tinyjsonarray();
    };
}